# multiple  多元化的
# processing 进程
# multiprocessing 多元的处理进程的模块

# from multiprocessing import Process
# import os
# import time
# def func(name,age):
#     print('% s start '%name)
#     time.sleep(1)
#     print(os.getpid(),os.getppid(),name,age)#pid process id 进程id #ppid parent process id  父进程id
#
# # print(123,func,id(func))
# if __name__ == '__main__':#主进程
#     #只会在主进程中执行的所有的代码你写在name=main下
#     print('main :',os.getpid(),os.getppid())
#     arg_lst=[('alex',84),('太白', 84),('AK', 19)]
#     for arg in arg_lst:
#         p=Process(target=func,args=arg)#开启多个子进程
#         p.start()#开启一个子进程，会copy父进程if __name__ == '__main__':上的所有代码，
#         #开启子进程,start()方法是非常典型的异步非阻塞

# 为什么要用 if __name__ == '__main__':
# 能不能给子进程传递参数
# 能不能获取子进程的返回值   # 不能

# 能不能同时开启多个子进程 可以
#join的用法
# import os
# import time
# from multiprocessing import Process
# import random
# def func(name,age):
#     print('发送一封邮件给%s岁的%s'%(age,name))
#     time.sleep(random.random())
#     print('发送完毕')
# if __name__ == '__main__':
#     arg_lst = [('alex', 84), ('太白', 84), ('AK', 19)]
#     for arg in arg_lst:
#         p=Process(target=func,args=arg)
#         p.start()
#         p.join() #阻塞直到p这个子进程执行完毕才继续执行代码
#     print('所有的文件已发送完毕')


import os
import time
from multiprocessing import Process
import random
def func(name,age):
    print('发送一封邮件给%s岁的%s'%(age,name))
    time.sleep(random.random())
    print('发送完毕')
if __name__ == '__main__':
    arg_lst = [('alex', 84), ('太白', 84), ('AK', 19)]
    p_lst=[]
    for arg in arg_lst:
        p=Process(target=func,args=arg)
        p.start()
        p_lst.append(p)
    for p in p_lst:p.join()
    # p = Process(target=func, args=('大壮', 40))
    # p.start()
    # p_lst.append(p)
    # p = Process(target=func, args=('alex', 15))
    # p.start()
    # p_lst.append(p)
    # p = Process(target=func, args=('太白', 55))
    # p.start()
    # p_lst.append(p)
    # p = Process(target=func, args=('wusir', 65))
    # p.start()
    # p_lst.append(p)
    # for p in p_lst:p.join()
    print('所有的文件已发送完毕')

















#同步阻塞 异步非阻塞
# 使用多进程实现一个并发的sokcet的server



























